#include <iostream>
#include <algorithm>

using namespace std;

const int N = 1010;

//m行n列，k条横向通道 l条纵向通道，d对交头接耳的同学
int m, n, k, l, d;

struct node
{
	int index;
	int cnt;
}row[N], col[N];

//按照 cnt 从大到小排序
bool cmp(node x, node y)
{
	return x.cnt > y.cnt;
}

//按照 index 从小到大排序
bool cmp2(node x, node y)
{
	return x.index < y.index;
}

int main()
{
	//1.横纵通道是可以分开来考虑的
	//	横向通道只影响上下交头接耳的同学
	//	纵向通道只影响左右交头接耳的同学
	//2.找出在有限的通道下，能影响最多对同学的方案
	//	把影响同学对数的情况，排序，取前k/l个
	cin >> m >> n >> k >> l >> d;
	//初始化
	for(int i = 1; i <= m; i++) row[i].index = i;
	for(int i = 1; i <= m; i++) col[i].index = i;

	while(d--)
	{
		int x, y, p, q; cin >> x >> y >> p >> q;
		if(x == p) col[min(y, q)].cnt++;// 横坐标相同，竖向通道
		else row[min(x, p)].cnt++;//纵坐标相同，横向通道
	}

	//对两个数组，按照cnt从大到小排序
	sort(row + 1, row + 1 + n, cmp);
	sort(col + 1, col + 1 + n, cmp);

	//对row数组，前k个元素，按照下标从小到大排序
	sort(row + 1, row + 1 + k, cmp2);
	//对col数组，前l个元素，按照下标从小到大排序
	sort(col + 1, col + 1 + l, cmp2);

	//输出
	for(int i = 1; i <= k; i++) cout << row[i].index << " ";
	cout << endl;
	for(int i = 1; i <= l; i++) cout << col[i].index << " ";

	return 0;
}

